package com.tairan.chapter.nacos.consumer;

import com.tairan.chapter.nacos.consumer.feign.ProviderApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class TairanSpringCloudNacosConsumerApplication {

	@LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	@Autowired
	private ProviderApi providerApi;

	public static void main(String[] args) {
		SpringApplication.run(TairanSpringCloudNacosConsumerApplication.class, args);
	}

	@RestController
	public class TestController {
		private final RestTemplate restTemplate;

		@Autowired
		public TestController(RestTemplate restTemplate) {
			this.restTemplate = restTemplate;
		}

		@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
		public String echo(@PathVariable String str) {
			return restTemplate.getForObject("http://tairan-spring-cloud-nacos-provider/provider/echo/" + str, String.class);
		}

		@RequestMapping("/feign/{str}")
		public String feign(@PathVariable String str) {
			return "feign: " + providerApi.echo(str);
		}

	}

}
